package linearSearch

import (
	"algorithms/interface/sort"
	"reflect"
)

// Search 线性查找法
// 返回所在索引，未找到返回-1
func Search[E sort.Equatable[E]](data []E, target E) int {
	for index := 0; index < len(data); index++ {
		if data[index].Equals(target) {
			return index
		}
	}
	return -1
}

// Search0 线性查找法
// 返回所在索引，未找到返回-1
// 相等比较，值必须满足全部相等
func Search0[E any](data []E, target E) int {
	for index := 0; index < len(data); index++ {
		if reflect.DeepEqual(data[index], target) {
			return index
		}
	}
	return -1
}

// Search1 线性查找法
// 返回所在索引，未找到返回-1
// 仅支持基础类型值的相等比较
func Search1[E comparable](data []E, target E) int {
	for index := 0; index < len(data); index++ {
		if data[index] == target {
			return index
		}
	}
	return -1
}
